package cn.b.sky.mes.mm.service;

import java.util.List;

import cn.b.sky.mes.mm.model.Inventory;
import cn.b.sky.mes.mm.model.InventoryItem;
import cn.b.sky.mes.mm.model.InventoryMove;
import cn.b.sky.mes.mm.model.MoveType;
import cn.b.sky.mes.mm.model.Requirement;
import cn.b.sky.mes.mm.model.Warehouse;

/**
 * 
 * <strong>Title : InventoryService.java<br></strong>
 * <strong>Package : cn.b.sky.mes.mm.service<br></strong>
 * <strong>Description : </strong>库存操作接口<br> 
 * <strong>Create on : 2016-3-3 下午06:44:30<br></strong>
 * <p>
 * @author zhaoxin01<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人    |    修改日期    |    修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface InventoryService {
  /**
   * 
   * <strong>Title : selectUserWarehouseList<br></strong>
   * <strong>Description : </strong>查询用户有权限且未锁定的仓库<br> 
   * <strong>Create on : 2016-3-3 下午06:44:25<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @return
   * List<Warehouse>
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Warehouse> selectUserWarehouseList(String siteCode, String userCode, String moveDirectionECode);

  /**
   * 
   * <strong>Title : selectMoveTypeByDirection<br></strong>
   * <strong>Description : </strong>查询指定移动方向的未锁定移动类型<br> 
   * <strong>Create on : 2016-3-3 下午06:48:36<br></strong>
   * <p>
   * @param siteCode
   * @param moveDirectionECode
   * @return
   * List<MoveType>
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<MoveType> selectMoveTypeByDirection(String siteCode, String userCode, String warehouseCode,
                                           String moveDirectionECode);

  /**
   * 
   * <strong>Title : insertInventoryMove<br></strong>
   * <strong>Description : </strong>新增库存移动记录<br> 
   * <strong>Create on : 2016-3-3 下午06:51:48<br></strong>
   * <p>
   * @param inventoryMove
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertInventoryMove(InventoryMove inventoryMove);

  /**
   * 
   * <strong>Title : insertInventory<br></strong>
   * <strong>Description : </strong>新增库存<br> 
   * <strong>Create on : 2016-3-3 下午06:52:20<br></strong>
   * <p>
   * @param inventory
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertInventory(Inventory inventory);

  /**
   * 
   * <strong>Title : updateInventory<br></strong>
   * <strong>Description : </strong>更新库存<br> 
   * <strong>Create on : 2016-3-3 下午06:52:57<br></strong>
   * <p>
   * @param inventory
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateInventory(Inventory inventory);

  /**
   * 
   * <strong>Title : selectInventory<br></strong>
   * <strong>Description : </strong>查询库存<br> 
   * <strong>Create on : 2016-3-3 下午06:54:11<br></strong>
   * <p>
   * @param siteCode
   * @param materialCode
   * @param warehouseCode
   * @return
   * Inventory
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Inventory selectInventory(String siteCode, String materialCode, String warehouseCode);

  /**
   * 
   * <strong>Title : deleteInventory<br></strong>
   * <strong>Description : </strong>删除库存<br> 
   * <strong>Create on : 2016-3-3 下午06:54:37<br></strong>
   * <p>
   * @param siteCode
   * @param materialCode
   * @param warehouseCode
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteInventory(String siteCode, String materialCode, String warehouseCode);

  /**
   * 
   * <strong>Title : insertInventoryItem<br></strong>
   * <strong>Description : </strong>新增库存明细<br> 
   * <strong>Create on : 2016-3-3 下午06:57:52<br></strong>
   * <p>
   * @param inventoryItem
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertInventoryItem(InventoryItem inventoryItem);

  /**
   * 
   * <strong>Title : updateInventoryItem<br></strong>
   * <strong>Description : </strong>更新库存明细<br> 
   * <strong>Create on : 2016-3-3 下午06:58:10<br></strong>
   * <p>
   * @param inventoryItem
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateInventoryItem(InventoryItem inventoryItem);

  /**
   * 
   * <strong>Title : selectInventoryItem<br></strong>
   * <strong>Description : </strong>查询库存明细（按工厂、物料、仓库、供应商、批次、库位）<br> 
   * <strong>Create on : 2016-3-3 下午06:58:24<br></strong>
   * <p>
   * @param inventoryItem
   * @return
   * InventoryItem
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  InventoryItem selectInventoryItem(InventoryItem inventoryItem);
  
  /**
   * 
   * <strong>Title : getInventoryItemsByItem<br></strong>
   * <strong>Description : </strong>获取同一库存（库位）的所有供应商的库存明细，进行扣料<br> 
   * <strong>Create on : 2016-9-19 下午5:03:56<br></strong>
   * <p>
   * @param inventoryItem
   * @return
   * List<InventoryItem>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<InventoryItem> getInventoryItemsByItem(InventoryItem inventoryItem);

  /**
   * 
   * <strong>Title : deleteInventoryItem<br></strong>
   * <strong>Description : </strong>删除订单明细<br> 
   * <strong>Create on : 2016-3-3 下午06:59:10<br></strong>
   * <p>
   * @param id
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteInventoryItem(long id);

  /**
   * 
   * <strong>Title : doOutStock<br></strong>
   * <strong>Description : </strong>出库<br> 
   * <strong>Create on : 2016-3-4 下午06:44:22<br></strong>
   * <p>
   * @param inventoryMove
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void doOutStock(InventoryMove inventoryMove);

  /**
   * 
   * <strong>Title : productBuckleMaterial<br></strong>
   * <strong>Description : </strong>生产扣料<br> 
   * <strong>Create on : 2016-9-20 上午11:36:31<br></strong>
   * <p>
   * @param siteCode
   * @param workUnitCode
   * @param workCenterCode
   * @param quantity
   * @param materialCode
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void productBuckleMaterial(String siteCode, 
      String workUnitCode, String workCenterCode, double quantity, String materialCode);
  /**
   * 
   * <strong>Title : doInStock<br></strong>
   * <strong>Description : </strong>入库<br> 
   * <strong>Create on : 2016年3月7日 下午4:28:01<br></strong>
   * <p>
   * @param inventoryMove
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人    |    修改日期    |    修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void doInStock(InventoryMove inventoryMove);

  /**
   * 
   * <strong>Title : doInStock<br></strong>
   * <strong>Description : </strong>移库<br> 
   * <strong>Create on : 2016年3月7日 下午4:28:01<br></strong>
   * <p>
   * @param inventoryMove
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人  | 修改日期  | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void doMoveStock(InventoryMove inventoryMove);

  /**
   * 
   * <strong>Title : getInventory<br></strong>
   * <strong>Description : </strong>查询需求对应的物料、仓库、库位的库存<br> 
   * <strong>Create on : 2016年9月18日 下午2:41:29<br></strong>
   * <p>
   * @param requirement
   * @return
   * double
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  double getInventory(Requirement requirement);

}
